package testcode.xss.servlets;
import org.apache.commons.lang.StringEscapeUtils;
import org.owasp.esapi.ESAPI;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class XssServlet3 extends HttpServlet {
private static final String SAFE_VALUE = "This is SAFE";
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String input1 = req.getParameter("input1");
sinkCalledOnlyWithEncoded(resp.getWriter(), ESAPI.encoder().encodeForHTML(input1));
writeWithEncoders(resp.getWriter(), input1);
}
public void writeWithEncoders(PrintWriter pw, String input1) {
pw.write(input1);
String encoded = ESAPI.encoder().encodeForHTML(input1);
pw.write(encoded.toLowerCase() + SAFE_VALUE);
pw.write(StringEscapeUtils.escapeHtml(input1));
pw.write(ESAPI.encoder().decodeForHTML(encoded) + SAFE_VALUE);
pw.write(myEncode(input1));
pw.write(myDecode(encoded));
pw.write(input1.replaceAll("[\"'<>&]", ""));
}
public String myEncode(String str) {
return ESAPI.encoder().encodeForHTML(str + "safe") + "safe";
}
public String myDecode(String str) {
return ESAPI.encoder().decodeForHTML(str + "safe") + "safe";
}
public void uncalledSink(PrintWriter pw, String str) {
pw.write(str);
}
public void sinkCalledOnlyWithEncoded(PrintWriter pw, String str) {
pw.write(str);
}
}